// pages/learn/demo/login/login.js
import { print, toast, } from '../../../../utils/util.js'

import { add, sub, multiply, divide } from '../../../../utils/calculate'
import { add2, sub2, multiply2, divide2 } from '../../../../utils/calculate2'

const util = require('../../../../utils/util.js')

const tempNum = 6;

Page({

  /**
   * 页面的初始数据
   */
  data: {
    phone: '',
    code: '',
    disabled: false,
    agreement: false,
    codeText: "获取验证码",
    num: 0,
    models: [{
      name: '夹克',
      value: 120,
      num: "15",
    }, {
      name: '衬衫',
      value: 69,
      num: 99,
    },]
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {

  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  onInputPhone(e) {
    this.setData({
      phone: e.detail.value
    })

    console.log('onInputPhone', this.data)
  },

  onInputCode(e) {
    this.setData({
      code: e.detail.value
    })

    console.log('onInputCode', this.data)
  },

  onGetCode(e) {
    console.log('onGetCode', e)
    // 倒计时
    let count = 30
    const taskId = setInterval(() => {
      count--
      if (count == 0) {
        clearInterval(taskId)
        this.setData({
          disabled: false,
          codeText: '获取验证码'
        })
      } else {
        // this.setData(obj) 修改与UI绑定的Data。传入一个object，仅修改对应属性
        this.setData({
          // disabled:true, // 放到外边只调用一次
          codeText: `${count} 秒后重试`
        })
      }
    }, 1000);
    this.setData({
      disabled: true
    })

    // 模拟耗时 获取验证码的逻辑
    setTimeout(() => {
      // floor 向下取整，
      let num = Math.floor(Math.random() * 10000);
      this.setData({
        code: num.toString().padStart(4, "0")
      })
      console.log('random ', num, this.data)
    }, 3000);
  },

  onAgree(e) {
    this.setData({
      // agreement: !this.data.agreement,
      agreement: !e.currentTarget.dataset.check
    })
    console.log('onAgree', e, this.data)
  },

  onSubmit(e) {
    const phoneReg = /^1[3456789]\d{9}$/
    if (!phoneReg.test(this.data.phone)) {
      // wx.showToast({
      //   title: '请输入正确的手机号码',
      //   icon: 'none'
      // })
      toast('请输入正确的手机号码')
      print(2)
      // print2(22) //  (0 , _util.print2) is not a function  源文件导出方式冲突了。
      console.log(util.formatTime(new Date()))
      util.print(0)
      return
    }
    // debugger
    if (!this.data.code || this.data.code.length < 4) {
      toast('请输入正确的验证码')
      return
    }
    if (!this.data.agreement) {
      toast('请查阅并同意协议')
      return
    }
    // 登录逻辑
    wx.showLoading({
      title: '登录中，请稍等'
    })
    setTimeout(() => {
      wx.hideLoading()
      toast(this.data.code == 1234 ? '登录成功' : '验证码有误')
    }, 3000);
  },

  onInputChange(e) {
    const item = e.currentTarget.dataset.md;
    const value = e.detail.value;
    console.log('onInputChange--->', e, "<-->" + this.data.models[0].num, JSON.stringify(this.data))  // 
    console.log('onInputChange--->2 ', item, value) // onInputChange--->2  {name: "夹克", value: 120, num: "15"}name: "夹克"num: "15"value:
    // model-value 也没能双向绑定
    const { models } = this.data; // 从对象中取出属性注意属性名要一样。
    console.log('onInputChange--->3 ', models)
    const oldItem = models.find(itm => itm.name == item.name);
    oldItem.num = value; // 这里修改也影响到前面的log。在前面使用基础类型打印能有实时数据。否则在调试器展开的时候会拿取当前最新值了显示。导致修改前的log中值也变成新的了。可以使用JSON.stringify(this.data)转成基础类型，这可以打印能有实时真实数据。
    // this.setData({ models }) // 等同于下一行.源码可以看到注释：其中 `key` 可以以数据路径的形式给出，支持改变数组中的某一项或对象的某个属性，如 `array[2].message`，`a.b.c.d`，并且不需要在 this.data 中预先定义。
    this.setData({
      models: models
    })
    console.log('onInputChange--->4 ', this.data)
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  },

  onAdd(e) {
    let rest = add(tempNum, 1)
    rest = add2(tempNum, 1)
    this.setData({
      num: rest
    })
  },
  onSub(e) {
    let rest = sub(tempNum, 1)
    rest = sub2(tempNum, 1)
    this.setData({
      num: rest
    })
  },
  onMultiply() {
    toast('*2')
    let rest = multiply(tempNum, 2)
    rest = multiply2(tempNum, 2)
    this.setData({
      num: rest
    })
  },
  onDivide() {
    let rest = divide(tempNum, 2)
    rest = divide2(tempNum, 2)
    this.setData({
      num: rest
    })
  },
})